English
106. Construct Binary Tree from Inorder and Postorder Traversal  
 
Problem Statement
Given two integer arrays inorder and postorder where inorder is the inorder traversal of a binary tree and postorder is the postorder traversal of the same tree, construct and return the binary tree.
Example 1:

Input: inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
Output: [3,9,20,null,null,15,7]
Example 2:
Input: inorder = [-1], postorder = [-1]
Output: [-1]
Constraints:
- 1 <= inorder.length <= 3000
- postorder.length == inorder.length
- -3000 <= inorder[i], postorder[i] <= 3000
- inorderand- postorderconsist of unique values.
- Each value of postorderalso appears ininorder.
- inorderis guaranteed to be the inorder traversal of the tree.
- postorderis guaranteed to be the postorder traversal of the tree.
Solution:
go
package main
// Definition for a binary tree node.
type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}
func buildTree(inorder []int, postorder []int) *TreeNode {
	mapInOrder := make(map[int]int)
	for i, v := range inorder {
		mapInOrder[v] = i
	}
	var helper func(int, int) *TreeNode
	helper = func(left, right int) *TreeNode {
		if left > right {
			return nil
		}
		pop := postorder[len(postorder)-1]
		postorder = postorder[:len(postorder)-1]
		root := &TreeNode{Val: pop}
		mid := mapInOrder[pop]
		root.Right = helper(mid+1, right)
		root.Left = helper(left, mid-1)
		return root
	}
	return helper(0, len(inorder)-1)
}
...